package com.java.basis.thread.n3;

import lombok.extern.slf4j.Slf4j;

/**
 * @author wangning
 * @create 2022-01-18 11:07
 */
@Slf4j(topic = "c.TestState")
public class TestState {
	public static void main(String[] args) throws InterruptedException {
		Thread t1 = new Thread("t1"){
			@Override
			public void run() {//new
				log.debug("running");
			}
		};

		Thread t2 = new Thread("t2"){
			@Override
			public void run() {
				while (true) {//runnable

				}
			}
		};
		t2.start();

		Thread t3 = new Thread("t3"){
			@Override
			public void run() {//terminated
				log.debug("running");
			}
		};
		t3.start();

		Thread t4 = new Thread("t4"){
			@Override
			public void run() {//timed_waiting
				synchronized (TestState.class) {
					try {
						Thread.sleep(1000000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		t4.start();

		Thread t5 = new Thread("t5"){
			@Override
			public void run() {//waiting
				try {
					t2.join();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		};
		t5.start();


		Thread t6 = new Thread("t6"){
			@Override
			public void run() {
				synchronized (TestState.class) {//blocked，由于锁已经被其它线程获取
					try {
						Thread.sleep(1000000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		t6.start();

		Thread.sleep(500);

		log.debug("t1 state {}", t1.getState());
		log.debug("t2 state {}", t2.getState());
		log.debug("t3 state {}", t3.getState());
		log.debug("t4 state {}", t4.getState());
		log.debug("t5 state {}", t5.getState());
		log.debug("t6 state {}", t6.getState());

	}
}
